package org.gwc.controller;

import org.gwc.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping(value = "param")
public class ParamValue {
    /**
     * 直接接收
     * /param/data?name=root&age=18
     * 形参列表，填写对应名称的参数即可！请求参数名=形参参数名即可
     * 问题：1、形参名称必须相同 2、非必须传递，不报错 xxx实验过后，基本类型的参数缺失会报错，不能将基本类型参数转换为null
     */
    @RequestMapping(value = "data")
    @ResponseBody
    public String data(String name, Integer age){
        System.out.println("name="+name+ ", age="+age);
        return "name="+name+ ", age="+age;
    }

    /**
     * 注解指定
     * 指定任意的请求参数名 要求必须传递 要求不必须传递 给予默认值
     * /param/data1?account=root&page=1
     * @RequestParam(value = "account,如果接收函数参数名与传递参数名不一样，需要通过其指定进行关联
     *               required = false,是否必须传递
     *               defaultValue = "10" 设置默认值
     *               )
     */
    @RequestMapping(value = "data1")
    @ResponseBody
    public String data1(@RequestParam(value = "account") String username,
                        @RequestParam(required = false,defaultValue = "10") int page){
        System.out.println("username = " + username+",page="+page);
        return "username = " + username+",page="+page;

    }


    /**
     * 参数多值
     * 一个参数多个值，类似复选框 key=1&key=2,使用对应的集合接收
     * param/data2?hbs=吃&hbs=喝
     * 不加注解@RequestParam 会将hbs对应的一个字符串直接赋值给集合,类型异常
     * 加了注解，经理就会将集合add加入对应的字符串
     */
    @RequestMapping(value = "data2")
    @ResponseBody
    public String data2(@RequestParam List<String> hbs){
        System.out.println("hbs = " + hbs);
        return "ok";
    }

    /**
     * 使用实体对象接值 用户注册（用户信息）
     * param/data3?name=二狗子&age=18
     * 在pojo中准备一个对应的实体类即可，形参名要和对象中属性名要相同
     */
    @RequestMapping(value = "data3")
    @ResponseBody
    public String data3(User user){
        System.out.println("user = " + user);
        return user.toString();
    }
}
